#include "Mario.h"
#include "Utils.h"
#include "Sprite.h"

#define MARIO_IMAGE_RIGHT "Mario_r.png"
#define MARIO_IMAGE_LEFT "Mario_l.png"
#define MARIO_SPEED 0.7f
#define GROUND_Y 536

Mario::Mario(void)
{}

Mario::~Mario(void)
{
	delete mario_left;
	delete mario_right;
}

void Mario::Update(int t)
{
	mario_x += mario_vx * t;
	mario_y += mario_vy * t;

	if (mario_vx > 0) mario_right->Next();
	if (mario_vx < 0) mario_left->Next();

	if (mario_y < GROUND_Y) mario_vy += 0.5f;
	else 
	{
		mario_y = GROUND_Y;
		mario_vy = 0;
	}	
}

void Mario::Render(LPDIRECT3DSURFACE9 _BackBuffer)
{
	_SpriteHandler->Begin(D3DXSPRITE_ALPHABLEND);

	if (mario_vx > 0)
		mario_right->Render(_BackBuffer,mario_x,mario_y);
	else if (mario_vx < 0)
		mario_left->Render(_BackBuffer,mario_x,mario_y);
	else if (mario_vx_last < 0)
		mario_left->Render(_BackBuffer,mario_x,mario_y);
	else 
		mario_right->Render(_BackBuffer,mario_x,mario_y);

	_SpriteHandler->End();
}
void Mario::LoadResources(LPDIRECT3DDEVICE9 d3ddv)
{
	D3DXCreateSprite(d3ddv,&_SpriteHandler);
	HRESULT res = D3DXCreateSprite(d3ddv,&_SpriteHandler);

	mario_x = 33;
	mario_y = GROUND_Y;

	mario_vx = 0;
	mario_vx_last = 1.0f;
	mario_vy = 0;

	mario_right = new CSprite(_SpriteHandler,MARIO_IMAGE_RIGHT,0,0,32,61,4,4);
	mario_left = new CSprite(_SpriteHandler,MARIO_IMAGE_LEFT,0,0,32,61,4,4);
}

void Mario::Jump()
{
	if (mario_y >= GROUND_Y) mario_vy-=3.0f;// start jump if is not "on-air"
}

void Mario::MoveLeft()
{
	mario_vx = -MARIO_SPEED;
	mario_vx_last = mario_vx;
}

void Mario::MoveRight()
{
	mario_vx = MARIO_SPEED;
	mario_vx_last = mario_vx;
}

void Mario::Stand()
{
	mario_vx = 0;
	mario_left->Reset();
	mario_right->Reset();
}